package com.ck.springcache.controller;


import com.ck.common.constant.AjaxResult;
import com.ck.common.entity.SysUser;
import com.ck.springcache.annotation.Cache;
import com.ck.springcache.service.GlobalCacheDemoService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.Map;

/**
 * @author ck
 * @date 2023/6/28 15:49
 */


/**
 * 通用缓存解决方案演示类
 * 1、所有请求都添加缓存吗？否，只针对GET请求
 * 2、所有GET请求都添加缓存吗？否，只针对添加了@Cach的请求方法
 * 3、缓存的时间长短如何控制？通过在@Cach注解上指定缓存时间来控制
 * 4、怎么控制缓存开关？通过配置文件配置缓存开关
 * 5、缓存请求拦截屏障和返回体增强屏障解决方:
 *   AOP 环绕通知（GlobalCacheAopAround）
 */
@RestController
public class GlobalCacheController {

    /**
     * 实现思路:
     *       1.自定义注解@Cache
     *       2.利用Aop在请求前查缓存，若有直接放回 无则将返回结果放入缓存
     *       3.在有效时间内访问接口直接在Aop层面返回缓存结果
     */

    @Autowired
    private GlobalCacheDemoService globalService;

    @GetMapping("action1")
    public AjaxResult action1() {
        Map<String,Object> result = this.globalService.action1();
        return AjaxResult.success(result);
    }


    @Cache(time = "35",key = "myUser",expression = "#user.getUserName(),#sex")
    @GetMapping("action2")
    public AjaxResult action2(SysUser user, String sex) {
        Map<String,Object> result = this.globalService.action2();
        return AjaxResult.success(result);
    }

}
